package cc.owoo.godpen.network.reptile;

import cc.owoo.godpen.util.N;

import java.net.Proxy;
import java.util.ArrayList;

/**
 * 循环代理池
 * Created by nimensei
 * 2022-03-08 上午 01:58
 **/
public class CirculationProxyPool implements cc.owoo.godpen.network.reptile.ProxyPool {
    private final ArrayList<Proxy> proxyList = new ArrayList<>();// 代理列表
    private int index = -1;// 当前迭代位置

    public CirculationProxyPool() {
    }

    public CirculationProxyPool(String text) {
        add(text);
    }

    /**
     * 以文本的形式添加代理列表
     *
     * @param text 代理列表
     */
    public void add(String text) {
        for (String s : text.split("\n")) {
            if ((s = s.trim()).length() == 0)
                continue;
            int index = s.indexOf(':');
            if (index == -1)
                continue;
            String ip = s.substring(0, index);
            int port = N.toInt(s.substring(index + 1), 80);
            add(ip, port);
        }
    }


    /**
     * 添加代理IP和端口
     *
     * @param ip   IP地址
     * @param port 端口号
     */
    public void add(String ip, int port) {
        proxyList.add(ProxyPool.create(ip, port));
    }

    /**
     * 获取一个代理
     *
     * @return 代理类
     */
    @Override
    public Proxy get() {
        synchronized (this) {
            if (++index >= proxyList.size())
                index = 0;
            return proxyList.get(index);
        }
    }
}
